/**
 * 文件名：@ViewNameResolverComposite.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.view <br/>
 * 项目名：afw-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.view;

import java.util.Collections;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 类名：ViewNameResolverComposite  <br />
 *
 * 功能：复合视图解析器
 *
 * @author xtwin <br />
 * 创建时间：2016年8月5日 上午12:32:58  <br />
 * @version 2016年8月5日
 */
public class ViewNameResolverComposite extends AbstractViewNameResolver {
	
	// 日志记录器
	private static final Logger logger = LoggerFactory.getLogger(ViewNameResolverComposite.class);
	
	// 视图解析器列表
	protected List<ViewNameResolver> viewNameResolvers = Collections.emptyList();
	
	// 默认视图
	protected String defaultName;
	
	/**
	 * 功能: 使用视图解析器列表依次进行视图解析，直到解析成功为止 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2016年8月5日 上午4:31:43<br/>
	 * 
	 * @param request
	 * @return
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.mvc.view.AbstractViewNameResolver#doResolve(javax.servlet.http.HttpServletRequest)
	 */
	@Override
	protected String doResolve(HttpServletRequest request) throws Exception {
		// 视图名称
		String name = null;
		
		// 依次解析尝试使用每个解析器进行解析
		for (ViewNameResolver resolver : viewNameResolvers) {
			// 解析视图名称
			name = resolver.resolve(request);
			
			if (null != name) {
				break;
			}
		}
		
		// 记录日志
		logger.debug("The resolve name is : {}", name);
		
		if (null == name) {
			name = defaultName;
		}
		
		return name;
	}

	/**
	 * @version 2016年8月5日-上午12:35:00
	 */
	public void setViewNameResolvers(List<ViewNameResolver> viewNameResolvers) {
		this.viewNameResolvers = viewNameResolvers;
	}

	/**
	 * @version 2016年8月5日-上午12:44:24
	 */
	public void setDefaultName(String defaultName) {
		this.defaultName = defaultName;
	}
}